package day02;
//此类是用于验证基本数据类型转换的测试demo
public class TypeConversionDemo {
    public static void main(String[] args) {
        /*基本数据类型从小到大
        byte --> short --> int（char） --> long --> float --> double
        小转大：自动转，又称之为隐式转换
        大转小：强制转，又称之为显示转换，需要在数据前加上(需要强制转换的类型)
        */

        //小转大，自动转
        int a = 10;     //定义一个int类型的变量a，值为10
        long  b = a;    //将int类型的变量a自动转换为long类型并赋值给b
        System.out.println(b);
        int c = 3;
        double d = c;    //将int类型的变量c自动转换为double类型并赋值给d
        System.out.println(d);  //3.0

        long e = 5;     //整数的直接量为int类型，小转大直接转换，5L
        double f = 3;   //整数的直接量为int类型，小转大直接转换，3.0
        System.out.println(e);
        System.out.println(f);

        //大转小，强制转换
        long g = 1000L;
        //int  h = g;       //大转小，不可以直接转
        int h = (int)g;     //将g变量强制转换为int类型，并赋值变量h
        System.out.println(h);

        double i = 3.1415926;
        //int j = i;        //大转小，不可以直接转
        int j = (int)i;     //将i变量强制转换为int类型，并赋值变量j，会丢失精度
        System.out.println(j);

        long k = 10000000000L;  //定义long类型的变量k，值为100亿
        //将k变量强制转换为int类型，并赋值变量l，会溢出，因为强制转换后的数据超出了int的最大范围
        int l = (int)k;
        System.out.println(l);  //会溢出，溢出的数据没有价值
        char temp1 = 'a';
        int  num   = temp1;     //char类型和int类型可以直接转换
        System.out.println(num);

        //两点规则
        //1.整数直接量可以直接赋值给byte、short、char数据类型，但是不能超出范围
        //2.byte、short、char型数据参与运算时，先一律自动转换为int再运算
        byte b1 = 5;
        byte b2 = 6;
        //byte b3 = 800;  //byte可以存储的范围-128到127，所以800超出范围
        //byte b3 = b1 + b2;  //编译错误，因为运算结果为int类型
        //byte b3 = (byte)b1 + b2;  //编译错误，强转优先级高，先做强制转换
        byte b3 = (byte) (b1 + b2); //对b1+b2的运算结果做强制转换
        System.out.println(b3);

        //字符就是键盘上的每一个字符，''引起来的直接量是字符类型
        System.out.println(2+2);    //4
        System.out.println(2 + '2');    //字符'2'所对应的码值是50，所以结果是52
        System.out.println('2' + '2');  //100
        int  x = '2' + '2';
        System.out.println(x);          //100

    }
}
